<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*
        严格模式
        1.使javascript在更严格的语法条件下运行

        作用：
        1.消除javascript语法的不合理，不严谨，减少怪异行为
        2.消除代码运行不安全之处，保证代码运行安全
        3.为未来新版本的javascript做好铺垫

        使用：
        1.在全局或函数第一条语句定义为'use strict'
        2.

        严格模式声明
        1.全局声明：'use strict'
        2.局部声明：function test(){
            'use strict';
        }

        严格模式特性：
        1.不允许使用未声明的变量

        'use strict';
        a = 20;
        console.log(a)  //报错

        2.函数内部的this不指向window

        'use srtict'
        function test (){
            console.log(this)
        }
        test();     //undefined

        3.对象不能有重复的属性
        'use strict'
        var obj = {
            name: 'xiaoA';
            name: 'xiaoB'
        }
        console.log(obj);   //xiaoB 覆盖操作 (有些编辑器会报错，浏览器不报错)

        4.严格模式下 函数不允许有同名的形参

        function test (a,a,a) {
            console.log(a)
        }
        test(1,2,3) //报错

        5.新增的保留字  private protected implements

        */


        /*
        数组的结构赋值(一一对应关系)
        let arr = [1,2,3,4]
        let [a,b,c,d] = arr
        console.log(a,b,c,d) //1,2,3,4

        对象的结构赋值(不是一一对应的关系，靠对象的属性名进行关联)
        let obj = {
            name:'xiaoA',
            age: 18
        }
        let {name,age} = obj;
        console.log(name)
        console.log(age)
        */




        /*
        复杂的结构赋值
        let obj = {
            name: 'xiaoA',
            age: 18
            hobby: ['抽烟','喝酒','烫头']
        }

        方式1
        let {hobby} = obj;
        let [one,two,three] = hobby
        console.log(one,two,three)
        
        方式2
        let [one,two,three] = obj.hobby;
        console.log(one,two,three)

        方式3
        let {hobby:[a,b,c]} =obj;
        console.log(a,b,c)
        console.log(hobby)  //报错  js语句一旦报错后面的代码不再执行
        
        */






    </script>
</body>
</html>